import request from '@/utils/request'
import { API_CONFIG } from '@/config'
import { ApiService } from './base'
import type { LoginForm, LoginResponseData, RefreshTokenResponseData, User } from '@/types'

/**
 * 用户登录
 */
export function login(data: LoginForm) {
  return request.post<LoginResponseData>(API_CONFIG.ENDPOINTS.AUTH.LOGIN, data)
}

/**
 * 获取用户信息
 */
export function getUserInfo() {
  return request.get<User>(API_CONFIG.ENDPOINTS.AUTH.USER_INFO)
}

/**
 * 用户登出
 */
export function logout() {
  return request.get(API_CONFIG.ENDPOINTS.AUTH.LOGOUT)
}

/**
 * 刷新Token
 */
export function refreshToken(accessToken: string, refreshToken: string) {
  return request.post<RefreshTokenResponseData>(API_CONFIG.ENDPOINTS.AUTH.REFRESH, { accessToken, refreshToken })
}

/**
 * 修改密码
 */
export function changePassword(data: { oldPassword: string; newPassword: string }) {
  return request.put(API_CONFIG.ENDPOINTS.AUTH.CHANGE_PASSWORD, data)
}

/**
 * 认证相关API服务类
 */
export class AuthService {
  /**
   * 安全登录（带重试机制）
   */
  static async safeLogin(data: LoginForm) {
    return ApiService.retryCall(() => login(data))
  }

  /**
   * 验证Token有效性
   */
  static async validateToken(): Promise<boolean> {
    try {
      await getUserInfo()
      return true
    } catch {
      return false
    }
  }

  /**
   * 安全获取用户信息
   */
  static async safeGetUserInfo(fallback?: User) {
    return ApiService.safeCall(() => getUserInfo(), fallback)
  }

  /**
   * 实例方法 - 登录
   */
  async login(data: LoginForm) {
    return login(data)
  }

  /**
   * 实例方法 - 获取用户信息
   */
  async getUserInfo() {
    return getUserInfo()
  }

  /**
   * 实例方法 - 登出
   */
  async logout() {
    return logout()
  }

  /**
   * 实例方法 - 刷新Token
   */
  async refreshToken(accessToken: string, refreshTokenValue: string) {
    return refreshToken(accessToken, refreshTokenValue)
  }

  /**
   * 实例方法 - 修改密码
   */
  async changePassword(data: { oldPassword: string; newPassword: string }) {
    return changePassword(data)
  }
}